package com.sise.Array;
import java.util.ArrayList;
import java.util.List;

/**
 *      118. 杨辉三角
 *      给定一个非负整数 numRows，生成杨辉三角的前 numRows 行。
 *      在杨辉三角中，每个数是它左上方和右上方的数的和。
 *      输入: 5
 *      输出:
 *      [
 *           [1],
 *          [1,1],
 *         [1,2,1],
 *        [1,3,3,1],
 *       [1,4,6,4,1]
 *      ]
 *
 *      題解：两层 for 循环
 *      第一个 for 循环代表层数，
 *      第二个 for 循环代表当前层中的数值，两边都为 1，中间则由上一层相加
 *
 *      这里需要注意的是：lists.get(i - 1).get(j)，第一个 get 是获取 list，第二个 get 是获取数值
 *
 */
public class _118_generate {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> lists = new ArrayList<>();
        for (int i = 0; i < numRows; i++) {
            List<Integer> list = new ArrayList<>();
            for (int j = 0; j <= i; j++) {      // 这里是等于号
                if (j == 0 || j == i) {         // 代表最左、最右边的 1
                    list.add(1);
                } else {
                    list.add(lists.get(i - 1).get(j) + lists.get(i - 1).get(j - 1));    // 由上一层相加
                }
            }
            lists.add(list);
        }
        return lists;
    }
}
